DPRINTK("blkfront_closing: %s removed\n", dev->nodename);
- if (info->mi) {
- DPRINTK("Calling xlvbd_del\n");
- xlvbd_del(info);
- info->mi = NULL;
- }
+ xlvbd_del(info);
xenbus_switch_state(dev, XBT_NULL, XenbusStateClosed);
}
int nr_minors = 1;
int err = -ENODEV;
+ BUG_ON(info->gd != NULL);
+ BUG_ON(info->mi != NULL);
+ BUG_ON(info->rq != NULL);
+
mi = xlbd_get_major_info(vdevice);
if (mi == NULL)
goto out;
out:
if (mi)
xlbd_put_major_info(mi);
+ info->mi = NULL;
return err;
}
void
xlvbd_del(struct blkfront_info *info)
{
- struct block_device *bd;
-
- bd = bdget(info->dev);
- if (bd == NULL)
- return;
-
- if (info->gd == NULL)
+ if (info->mi == NULL)
return;
+ BUG_ON(info->gd == NULL);
del_gendisk(info->gd);
put_disk(info->gd);
+ info->gd = NULL;
+
xlbd_put_major_info(info->mi);
info->mi = NULL;
- blk_cleanup_queue(info->rq);
- bdput(bd);
+ BUG_ON(info->rq == NULL);
+ blk_cleanup_queue(info->rq);
+ info->rq = NULL;
}
/*